#ifndef COMPUESTO_H_
#define COMPUESTO_H_

#include <list>
#include <iostream>

using namespace std;

class Componente;

/*
 * Funcion: Contiene Componentes.
 */
class Compuesto {

protected:
	list<Componente*> componentes;

public:
	/*
	 * Pre: -
	 * Pos: crea una nueva instancia.
	 */
	Compuesto();

	/*
	 * Pre: -
	 * Pos: Libera los recursos instanciados.
	 */
	virtual ~Compuesto();

	/*
	 * Pre: -
	 * Pos: Devuelve la lista de componentes contenidos.
	 */
	list<Componente*>& getComponentes();

	/*
	 * Pre: Componente distinto a nulo
	 * Pos: Agrega el componente al compuesto.
	 */
	void agregarComponente(Componente* componente);

	/*
	 * Pre: -
	 * Pos: Devuelve la cantidad de componentes almacenados.
	 */
	unsigned getCantComponentes();
};

#endif /* COMPUESTO_H_ */
